package u2

import (
	"net/url"
	"strings"
)

// UrlEncode 对字符串进行URL编码
//
// 参数：
//
//	s - 要编码的字符串
//
// 返回值：
//
//	string - URL编码后的字符串
//
// 注意：
//  1. 使用net/url包的QueryEscape进行编码
//  2. 将编码结果中的"+"替换为"%20"，以符合更严格的URL编码标准
//
// 示例：
//
//	encoded := UrlEncode("Hello World!") // 返回"Hello%20World%21"
func UrlEncode(s string) string {
	return strings.Replace(url.QueryEscape(s), "+", "%20", -1)
}

// UrlDecode 对URL编码的字符串进行解码
//
// 参数：
//
//	s - 要解码的URL编码字符串
//
// 返回值：
//
//	string - 解码后的字符串
//	error - 如果解码失败返回错误信息
//
// 注意：
//  1. 使用net/url包的QueryUnescape进行解码
//  2. 解码前将字符串中的"+"替换为"%20"，以处理更严格的URL编码
//
// 示例：
//
//	decoded, err := UrlDecode("Hello%20World%21") // 返回"Hello World!", nil
func UrlDecode(s string) (string, error) {
	return url.QueryUnescape(strings.Replace(s, "+", "%20", -1))
}
